import java.util.Scanner;

//求二进制1的个数(优化)
public class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        int i=1;
        int cnt=0;
        //法一
//        while(n!=0){   //优化, 当n=0时不再计算
//            if((n&1)==1){
//                cnt++;
//            }
//            n>>>=1;   //无符号右移
//            i++;
//        }
        //法二
        while(n!=0){
            n&=n-1;   //5&4=4   4&3=0
            cnt++;    //101 & 100-->100   100 & 011-->000
        }
        System.out.println(cnt);
    }
}

//模拟登录(字符串)
class Test2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String key="123 A";
        int flag=0;
        int i=1;
        System.out.println("您有三次输入机会");
        System.out.println("请输入您的密码");
        while(i<=3){
            String input=in.nextLine();   //要以读入一行的方式
            if(input.equals("123 A")){  //字符串比较函数
                flag=1;
                System.out.println("登录成功");
                break;
            }
            else{
                System.out.println("密码错误，请重新输入");
            }
            i++;
        }
        if(flag==0){
            System.out.println("您已经用完三次机会，登陆失败");
        }
    }
}



// 打印X图形(多组输入的方法)
class Test3 {public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    while(in.hasNext()){    //多组输入的方法
        int n=in.nextInt();
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(i==j || i+j == n-1){
                    System.out.print('*');
                } else{
                    System.out.print(' ');
                }
            }
            System.out.println();
        }
    }
}
}
